/*
循环引用定义
循环引用是指对象中的属性指向对象本身，如果属性内部的深层属性指向对象本身，也属于循环引用。如
// 循环引用
const a = {};
a.b = a

判断是否存在循环引用可以简单定义为对象内部的属性是否和对象本身的地址相同。
 */

function isLoop(obj){
    let flag = false
    function check(obj, pObj){
        pObj = pObj || [obj]
        for(let key in obj){
            // 只判断是对象的情况
            if(typeof obj[key] === 'object'){
                pObj.forEach(item=>{
                    if(item === obj[key]){
                        obj[key] = 'c'
                        flag = true
                    }
                })
                check(obj[key],[...pObj, obj[key]])
            }
        }
        return obj
    }
    check(obj)
    return flag
}
let a = {}
a.b = {}
a.b.c = {}
console.log(isLoop(a))
